home *** CD-ROM | disk | FTP | other *** search
- package engine
- {
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.geom.Point;
- import flash.geom.Rectangle;
-
- public class SceneCamera extends Bitmap
- {
-
-
- private var _ch:Number = 440;
-
- private var _cw:Number = 700;
-
- private var _cx:Number = 0;
-
- private var _cy:Number = 0;
-
- private var _collisions:Array;
-
- private var _tx:Number = 0;
-
- private var _ty:Number = 0;
-
- private var _lensData:BitmapData;
-
- private var _my:Number = 0;
-
- private var _collisionDebug:Boolean = false;
-
- private var _mx:Number = 0;
-
- private var _cropPadding:Number = 100;
-
- private var _focalLength:Number;
-
- private var _subject:*;
-
- private var _collisionData:BitmapData;
-
- public function SceneCamera(bmd:BitmapData = null, snap:String = "auto", smooth:Boolean = false)
- {
- _tx = 0;
- _ty = 0;
- _cx = 0;
- _cy = 0;
- _cw = 700;
- _ch = 440;
- _cropPadding = 100;
- _collisionDebug = false;
- _mx = 0;
- _my = 0;
- if(!bmd)
- {
- _lensData = new BitmapData(_cw,_ch);
- _collisionData = new BitmapData(_cw,_ch,false,0);
- bmd = _lensData;
- }
- _focalLength = WorldScene.Instance.Con.SC_FOCAL_LENGTH;
- _collisions = new Array();
- super(bmd,snap,smooth);
- }
-
- public function set ty(inVal:Number) : *
- {
- _ty = inVal;
- }
-
- public function init() : *
- {
- }
-
- public function get CamLoc() : Object
- {
- return {
- "x":_cx,
- "y":_cy
- };
- }
-
- public function set tx(inVal:Number) : *
- {
- _tx = inVal;
- }
-
- public function set Subject(inVal:*) : *
- {
- _subject = inVal;
- }
-
- private function drawToLens(obj:*) : *
- {
- var rX:Number = NaN;
- var rY:Number = NaN;
- var collision:Boolean = false;
- rX = _cx;
- rY = _cy;
- if(obj.x - obj.w * obj.s * (obj.z / _focalLength) / 2 < rX * obj.pxd * obj.z + _cw + _cropPadding && obj.x + obj.w * obj.s * (obj.z / _focalLength) / 2 > rX * obj.pxd * obj.z - _cropPadding && obj.y - obj.h * obj.s * (obj.z / _focalLength) / 2 < rY * obj.pyd * obj.z + _ch + _cropPadding && obj.y + obj.h * obj.s * (obj.z / _focalLength) / 2 > rY * obj.pyd * obj.z - _cropPadding || obj.lockX || Boolean(obj.lockY))
- {
- obj.CameraFocus = true;
- if(obj.solid)
- {
- _collisionData.fillRect(new Rectangle(0,0,_cw,_ch),0);
- obj.collisionDraw(_collisionData,rX,rY);
- collision = Boolean(_subject.findCollision(_collisionData,16711680,rX,rY));
- if(collision)
- {
- _collisions.push(obj);
- }
- }
- if(obj.vis)
- {
- obj.draw(_lensData,rX,rY);
- }
- obj.AuditMeter = 0;
- }
- else
- {
- obj.CameraFocus = false;
- ++obj.AuditMeter;
- }
- }
-
- public function get tx() : Number
- {
- return _tx;
- }
-
- public function get ty() : Number
- {
- return _ty;
- }
-
- public function get FocalLength() : Number
- {
- return _focalLength;
- }
-
- public function updateDisplay() : *
- {
- var sceneData:Object = null;
- var rX:Number = NaN;
- var rY:Number = NaN;
- var i:int = 0;
- var len:int = 0;
- var tx:Number = NaN;
- var ty:Number = NaN;
- _collisions.splice(0,_collisions.length);
- if(_subject)
- {
- tx = (_subject.x - 40 + _subject.vx * 7.5) / _subject.z - _cw / 1.5 / _focalLength;
- ty = (_subject.y + _subject.vy * 5) / _subject.z - _ch / 1.5 / _focalLength;
- _tx += (tx - _tx) * 0.25;
- _ty += (ty - _ty) * 0.25;
- _cx += (_tx - _cx) * 0.25;
- _cy += (_ty - _cy) * 0.25;
- }
- if(_cx < 0)
- {
- _cx = 0;
- }
- if(_cy < 0)
- {
- _cy = 0;
- }
- if(_cx > 3750)
- {
- _cx = 3750;
- }
- if(_cy > 400)
- {
- _cy = 400;
- }
- sceneData = WorldScene.Instance.SceneData;
- _lensData.lock();
- _collisionData.lock();
- _lensData.fillRect(new Rectangle(0,0,_cw,_ch),0);
- rX = _cx;
- rY = _cy;
- if(rX < 490)
- {
- _lensData.copyPixels(sceneData.sub_bg_city,new Rectangle(rX * 0.2 + 50,rY * 0.25 - 50,_cw,_ch),new Point(0,0));
- }
- if(rX > 200 && rX < 1174)
- {
- _lensData.copyPixels(sceneData.sub_bg_arch,new Rectangle(rX * 0.88 - 790,rY * 0.95 - 15,_cw,_ch),new Point(0,0));
- }
- if(rX > 1630 && rX < 2900)
- {
- _lensData.copyPixels(sceneData.sub_bg_space,new Rectangle(rX * 0.7 - 1600,rY * 0.7 - 10,_cw,_ch),new Point(0,0));
- }
- _lensData.copyPixels(sceneData.bg,new Rectangle(Math.floor(rX),Math.floor(rY),_cw,_ch),new Point(0,0),null,null,true);
- i = 0;
- for(i = 0; i < sceneData.SceneryMGObjects.length; drawToLens(sceneData.SceneryMGObjects[i]),i++)
- {
- }
- for(i = 0; i < sceneData.GameplayObjects.length; drawToLens(sceneData.GameplayObjects[i]),i++)
- {
- }
- for(i = 0; i < sceneData.FXObjects.length; drawToLens(sceneData.FXObjects[i]),i++)
- {
- }
- for(i = 0; i < sceneData.SceneryFGObjects.length; drawToLens(sceneData.SceneryFGObjects[i]),i++)
- {
- }
- _lensData.unlock();
- _collisionData.unlock();
- for(i = 0; i < _collisions.length; i++)
- {
- WorldScene.Instance.collisionRegistered(_collisions[i]);
- }
- if(_collisionDebug)
- {
- _lensData.draw(_collisionData);
- }
- }
- }
- }
-